//
//  HttpDownLoadBlock.m
//  HttpDemo2_1518
//
//  Created by 张诚 on 15/7/13.
//  Copyright (c) 2015年 zhangcheng. All rights reserved.
//

#import "HttpDownLoadBlock.h"
#import "MyMD5.h"
#import "NSFileManager+Method.h"
@implementation HttpDownLoadBlock
-(id)initWithUrlStr:(NSString *)urlStr Block:(void (^)(BOOL, HttpDownLoadBlock *))a
{
    /*
     加密 是对我们数据的一种保护，可以用于防止别人破解，并且用于防止小白用户吐槽 最明显的是12306 最开始的时候他用户名和密码都没做加密处理，就导致小白会吐槽你泄露我用户隐私，程序员呢~~改变世界，发明抢票软件，12306加密了，程序员~破解  所以这个世界就是程序员难为程序员
     加密有什么
     MD5加密  非对称加密 传说不可破解，但是早就破解了
     sha系列加密   -1  -4 -128 -256
     RC4加密
     */
   
    if (self=[super init]) {
        //记录block指针
        self.downLoad=a;
        //当开始网络请求的时候，我们让菊花转一下
        [UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
        
        /*
         我需要判断这个文件是否存在，并且这个文件的创建时间和我现在的时间差有多少，如果小于我设定的，则直接读取该文件，进行解析
         这里用到文件管理NSFileManager 我们为了简化代码，把NSFileManager添加一个类别，用于判断文件是否在有效期
         */
        
        NSFileManager*fileManager=[NSFileManager defaultManager];
        //记录路径
        self.path=[NSString stringWithFormat:@"%@/Documents/%@",NSHomeDirectory(),[MyMD5 md5:urlStr]];
        
        
        if ([fileManager fileExistsAtPath:self.path]&&[fileManager downLoadFileName:[MyMD5 md5:urlStr] TimeOut:60*60]) {
            //读取本地文件
            self.data=[NSMutableData dataWithContentsOfFile:self.path];
            //进行解析
            [self jsonValue];
        }else{
            //开始下载
            [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]] delegate:self];
        
        }
 
    }
    return self;
}
//实现4个方法
//开始接受数据
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    self.data=[NSMutableData data];
}
//持续接受数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.data appendData:data];
}
//接受数据完成
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //下载成功以后，保存文件
    [self.data writeToFile:self.path atomically:YES];
    
    //当数据请求完成后，需要进行解析
    [self jsonValue];
    

}
//请求错误
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible=NO;

    
    if (self.downLoad) {
        self.downLoad(NO,self);
    }
}

-(void)jsonValue{
    [UIApplication sharedApplication].networkActivityIndicatorVisible=NO;

    id result=[NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingMutableContainers error:nil];
    //判断类型
    if ([result isKindOfClass:[NSArray class]]) {
        self.dataArray=result;
    }else{
        if ([result isKindOfClass:[NSDictionary class]]) {
            self.dataDic=result;
        }else{
        //如果不是数组，也不是字典，那么就是解析失败，失败则是图片
            self.dataImage=[UIImage imageWithData:result];
        }
    
    }

    //解析完成后调用block
    if (self.downLoad) {
        self.downLoad(YES,self);
    }

}

@end
